#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import sys


class FeatureInfo(object):
    """
    冷轧符合性_静态表
    """

    # 机组号
    unit_code = None

    # 指标ID
    item_id = None

    item_chn_name = None

    # 工艺段ID
    section_id = None
    # 工艺段名称
    section_name = None

    # 分厂标记
    factory_desc = None

    # 特性代码
    feature_code = None

    # NOTE 统计类型。 statistics_type有两种情况，1代表低频数据统计，2代表高频数据统计
    statistics_type = None

    # 源表Schema
    tbl_schema = None

    # 源表英文名称
    tbl_eng_name = None

    # 字段英文名称
    field_eng_name = None

    # 源表中入口卷号字段英文名称
    entry_coilno_field = None

    #
    # field_id = None
    qty_grade = None

    # 源表中出口卷号字段英文名称, 如果有出口卷号，则按出口卷号group by,  否则按入口卷号group by
    # NOTE 当prod_coilno_field有数据时 在读取dataframe1时直接select出对应的 出口卷号
    # NOTE 将dataframe1所有特性的实际值与dataframe4先按照原有逻辑进行merge得到dataframe5，
    # NOTE 只不过此时的dataframe5多了一个出口卷号
    prod_coilno_field = None

    # 源表中时间字段英文名称
    time_field = None

    def __init__(self, p_dic=None):
        self.unit_code = p_dic['unit_code']
        self.item_id = p_dic['item_id']
        self.item_chn_name = p_dic['item_chn_name']
        self.section_id = p_dic['section_id']
        self.section_name = p_dic['section_name']
        self.factory_desc = p_dic['factory_desc']
        self.feature_code = p_dic['feature_code']
        self.statistics_type = int(p_dic['statistics_type'])
        self.tbl_schema = p_dic['tbl_schema']
        self.tbl_eng_name = p_dic['tbl_eng_name']
        self.field_eng_name = p_dic['field_eng_name']
        self.entry_coilno_field = p_dic['entry_coilno_field']
        self.prod_coilno_field = p_dic['prod_coilno_field']
        self.time_field = p_dic['time_field']
        #
        # self.field_id = p_dic.get('field_id')
        self.qty_grade = p_dic.get('qty_grade')
        pass

    def serialize(self) -> (dict):
        return self.__dict__


class FactDetail(object):
    """
    冷轧符合性_指标明细表
    """
    # 评价指标ID    VARCHAR
    ITEM_ID = None
    # 评价指标名称    VARCHAR
    ITEM_CHN_NAME = None
    # 生产结束时间/采样时间    VARCHAR
    END_TIME = None
    # 机组代码    VARCHAR
    UNIT_CODE = None
    # 出口卷号    VARCHAR
    PROD_COILNO = None
    # 入口卷号    VARCHAR
    ENTRY_COILNO = None
    # 工艺段ID    VARCHAR
    SECTION_ID = None
    # 工艺段名称    VARCHAR
    SECTION_NAME = None
    # 分厂标记
    FACTORY_DESC = None
    # 钢卷出口重量 DECIMAL
    EXIT_WT = None
    # 出钢记号    VARCHAR
    TAPPING_MARK = None
    # CP合格率 DECIMAL
    QUALIFIED_RATE = None
    # CP合格点数	INTEGER
    QUALIFIED_QTY = None
    # CP总点数	INTEGER
    TOTAL_QTY = None
    # CP判定标记	INTEGER
    # 1：正常（绿色）
    # 2：预警（黄色）
    # 3：异常（红色）
    QUALIFIED_JUDGE = None
    # 生产日期    VARCHAR
    PROD_DATE = None
    # 生产月份    VARCHAR
    PROD_MONTH = None
    # 生产班别	VARCHAR
    # 甲班：1
    # 乙班：2
    # 丙班：3
    # 丁班：4
    PROD_TURN = None
    # 记录创建者    VARCHAR
    REC_CREATOR = None
    # 记录创建时间    VARCHAR
    REC_CREATE_TIME = None
    # 记录修改者    VARCHAR
    REC_REVISOR = None
    # 记录修改时间    VARCHAR
    REC_REVISOR_TIME = None

    def __init__(self, p_dic=None):
        self.ITEM_ID = None
        self.ITEM_CHN_NAME = None
        self.END_TIME = None
        self.UNIT_CODE = None
        self.PROD_COILNO = None
        self.ENTRY_COILNO = None
        self.SECTION_ID = None
        self.SECTION_NAME = None
        self.EXIT_WT = None
        self.TAPPING_MARK = None
        # CP合格率 DECIMAL
        self.QUALIFIED_RATE = None
        # CP合格点数	INTEGER
        self.QUALIFIED_QTY = None
        # CP总点数	INTEGER
        self.TOTAL_QTY = None
        # CP判定标记	INTEGER
        # 1：正常（绿色）
        # 2：预警（黄色）
        # 3：异常（红色）
        self.QUALIFIED_JUDGE = None
        # 生产日期    VARCHAR
        self.PROD_DATE = None
        # 生产月份    VARCHAR
        self.PROD_MONTH = None
        # 生产班别	VARCHAR
        # 甲班：1
        # 乙班：2
        # 丙班：3
        # 丁班：4
        self.PROD_TURN = None
        # 记录创建者    VARCHAR
        self.REC_CREATOR = None
        # 记录创建时间    VARCHAR
        self.REC_CREATE_TIME = None
        # 记录修改者    VARCHAR
        self.REC_REVISOR = None
        # 记录修改时间    VARCHAR
        self.REC_REVISOR_TIME = None
        pass

    def serialize(self) -> (dict):
        return self.__dict__


class Summary(object):
    """
    高频数据汇总
    一个卷100条数据统计成1条数据
    CP总点数  100
    CP合格点数  其中是1的个数，或者求和，因为不是0就是1
    CP合格率  CP合格点数/ CP总点数*100%
    CP判定标记   合格率百分比[0,75)红色,[75,90)黄色,[90,100] 绿色
    1：正常（绿色）
    2：预警（黄色）
    3：异常（红色）
    """
    # CP总点数
    CP_NUM_TOTAL = -1

    # CP合格点数  其中是1的个数，或者求和，因为不是0就是1
    CP_NUM_OK = -1

    # CP合格率  CP合格点数/ CP总点数*100%
    CP_NUM_OK_RATE = 0

    #     CP判定标记   合格率百分比[0,75)红色,[75,90)黄色,[90,100] 绿色
    #     1：正常（绿色）
    #     2：预警（黄色）
    #     3：异常（红色）
    CP_FLAG = -1

    def __init__(self, p_cp_num_total=-1, p_num_ok=-1):
        # super(LowFrequencyDetail, self).__init__(p_dic=p_dic)
        # self.statistics_type = 2
        self.CP_NUM_TOTAL = p_cp_num_total
        self.CP_NUM_OK = p_num_ok
        self.CP_NUM_OK_RATE = int(100 * (self.CP_NUM_OK / self.CP_NUM_TOTAL))

        if self.CP_NUM_OK_RATE in range(0, 75):
            # 正常（绿色）
            self.CP_FLAG = 3
        if self.CP_NUM_OK_RATE in range(75, 90):
            # 预警（黄色）
            self.CP_FLAG = 2
        if self.CP_NUM_OK_RATE in range(90, 100 + 1):
            # 异常（红色）
            self.CP_FLAG = 1
        #
        if self.CP_NUM_OK == -1:
            self.CP_FLAG = 4

        pass

    def isLowFrequency(self):
        return self.CP_NUM_TOTAL == 1 and (self.CP_NUM_OK == 1 or self.CP_NUM_OK == 0)

    def serialize(self) -> (dict):
        return self.__dict__


class Range(object):
    """

    """
    # st_no(出钢记号)这个字段也先取出来,最后写入到数据库用
    st_no = None

    # 下限 lower limit
    cp_item_n_001 = None
    # 上限 upper limit
    cp_item_n_003 = None

    mock = False

    def __init__(self, p_dic=None, p_mock: bool = False):
        self.st_no = p_dic['st_no']

        self.cp_item_n_001 = p_dic['cp_item_n_001']
        self.cp_item_n_003 = p_dic['cp_item_n_003']

        self.mock = p_mock

        pass

    def serialize(self) -> (dict):
        return self.__dict__


class STSEntry(object):
    """

    """
    # 统计类型， 高频/低频
    statistics_type = None

    # 入口卷号
    entry_coilno = None

    # 参数名 例如温度
    field_eng_name = None

    # 参数值， 例如10摄氏度
    field_value = None

    def __init__(self, p_statistics_type=None, p_field_eng_name=None, p_dic=None):
        self.statistics_type = p_statistics_type
        self.field_eng_name = p_field_eng_name
        # NOTE 入口卷号就统一交 entry_coilno，  就不叫coilno了
        self.entry_coilno = p_dic['entry_coilno']
        self.field_value = p_dic['field_value']
        pass

    def serialize(self) -> (dict):
        return self.__dict__


class ExitPdoDataEntry(object):
    """

    """
    # ENTRY_COILNO	入口卷号
    entry_coilno = None

    # PROD_COILNO	出口卷号
    prod_coilno = None

    # PROD_DATE	生产日期
    prod_date = None

    # PROD_TURN	生产班别
    prod_turn = None

    # shift 生产班次
    shift = None

    # EXIT_WT	钢卷出口重量
    exit_wt = None

    # 对应的入口数据， 即STSEntry
    parent = None

    def __init__(self, p_dic=None, p_parent=None):
        self.entry_coilno = p_dic['entry_coilno']
        self.prod_coilno = p_dic['prod_coilno']
        self.prod_date = p_dic['prod_date']
        self.prod_turn = p_dic['prod_turn']
        self.shift = p_dic['shift']
        self.exit_wt = p_dic['exit_wt']
        self.parent = p_parent
        pass

    def serialize(self) -> (dict):
        return self.__dict__
